package com.zhonghui.mes.service.impl;

import java.util.List;

import com.zhonghui.mes.domain.vo.MesProductionCompletionVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.zhonghui.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.zhonghui.mes.domain.MesPlannedProduction;
import com.zhonghui.mes.mapper.MesProductionCompletionMapper;
import com.zhonghui.mes.domain.MesProductionCompletion;
import com.zhonghui.mes.service.IMesProductionCompletionService;

/**
 * 制造执行MES-生产完工单Service业务层处理
 * 
 * @author zhonghui
 * @date 2024-04-18
 */
@Service
public class MesProductionCompletionServiceImpl implements IMesProductionCompletionService 
{
    @Autowired
    private MesProductionCompletionMapper mesProductionCompletionMapper;

    /**
     * 查询制造执行MES-生产完工单
     * 
     * @param id 制造执行MES-生产完工单主键
     * @return 制造执行MES-生产完工单
     */
    @Override
    public MesProductionCompletion selectMesProductionCompletionById(Long id)
    {
        return mesProductionCompletionMapper.selectMesProductionCompletionById(id);
    }

    /**
     * 查询制造执行MES-生产完工单列表
     * 
     * @param mesProductionCompletionVo 制造执行MES-生产完工单
     * @return 制造执行MES-生产完工单
     */
    @Override
    public List<MesProductionCompletionVo> selectMesProductionCompletionList(MesProductionCompletionVo mesProductionCompletionVo)
    {
        return mesProductionCompletionMapper.selectMesProductionCompletionList(mesProductionCompletionVo);
    }

    /**
     * 新增制造执行MES-生产完工单
     * 
     * @param mesProductionCompletion 制造执行MES-生产完工单
     * @return 结果
     */
    @Transactional
    @Override
    public int insertMesProductionCompletion(MesProductionCompletion mesProductionCompletion)
    {
        int rows = mesProductionCompletionMapper.insertMesProductionCompletion(mesProductionCompletion);
        insertMesPlannedProduction(mesProductionCompletion);
        return rows;
    }

    /**
     * 修改制造执行MES-生产完工单
     * 
     * @param mesProductionCompletion 制造执行MES-生产完工单
     * @return 结果
     */
    @Transactional
    @Override
    public int updateMesProductionCompletion(MesProductionCompletion mesProductionCompletion)
    {
        mesProductionCompletionMapper.deleteMesPlannedProductionByProductionPlanId(mesProductionCompletion.getId());
        insertMesPlannedProduction(mesProductionCompletion);
        return mesProductionCompletionMapper.updateMesProductionCompletion(mesProductionCompletion);
    }

    /**
     * 批量删除制造执行MES-生产完工单
     * 
     * @param ids 需要删除的制造执行MES-生产完工单主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteMesProductionCompletionByIds(Long[] ids)
    {
        mesProductionCompletionMapper.deleteMesPlannedProductionByProductionPlanIds(ids);
        return mesProductionCompletionMapper.deleteMesProductionCompletionByIds(ids);
    }

    /**
     * 删除制造执行MES-生产完工单信息
     * 
     * @param id 制造执行MES-生产完工单主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteMesProductionCompletionById(Long id)
    {
        mesProductionCompletionMapper.deleteMesPlannedProductionByProductionPlanId(id);
        return mesProductionCompletionMapper.deleteMesProductionCompletionById(id);
    }

    /**
     * 新增制造执行MES-计划排产信息
     * 
     * @param mesProductionCompletion 制造执行MES-生产完工单对象
     */
    public void insertMesPlannedProduction(MesProductionCompletion mesProductionCompletion)
    {
        List<MesPlannedProduction> mesPlannedProductionList = mesProductionCompletion.getMesPlannedProductionList();
        Long id = mesProductionCompletion.getId();
        if (StringUtils.isNotNull(mesPlannedProductionList))
        {
            List<MesPlannedProduction> list = new ArrayList<MesPlannedProduction>();
            for (MesPlannedProduction mesPlannedProduction : mesPlannedProductionList)
            {
                mesPlannedProduction.setProductionPlanId(id);
                list.add(mesPlannedProduction);
            }
            if (list.size() > 0)
            {
                mesProductionCompletionMapper.batchMesPlannedProduction(list);
            }
        }
    }
}
